Amongst the computational models that are in use today, a Turing Machine model is the most powerful, but cannot be directly implemented in an Integrated Circuit (i.e., a Chip). In order to execute a Turing Machine Model, it must first be translated to State Machines and Combinatorial Logic models which are then realized using the transistors in the chip. While a Turing Machine is a model of computation, State Machines and Combinatorial Logic are the execution intelligence of a Turing Machine. Embedded within software is a model that represents the overall function of the software and another underneath that represents the execution model of the device that will be executing the software. Each of these models has multiple methodologies to express the model's intent so experts in each model are generally employed in a project.
On one end of the spectrum, the human side, this knowledge is contained in many written pages and many lines of different computer code. Eventually, this human knowledge is translated for the other end of the spectrum, the hardware, the Chip. On the hardware side, the human-conceived domain knowledge and software language models must be translated into execution knowledge. The execution intelligence is then used to assemble billions of transistors into a form that models human-based knowledge.
Transferring human knowledge to machine knowledge requires that the human knowledge first be assembled into a form that can be translated to machine execution knowledge. A primary function of computer software is to assemble the human intelligence into a form that is transferable to a computational machine, a chip, for execution. In most cases the software-assembled intelligence is translated into computational intelligence that a Turing machine (a computer) will execute. A Turing Machine is a programmable model of computation that executes human knowledge and is implemented in a Chip as a pre-assembled, fixed configuration of transistors. Software languages that program a Turing Machine, such as C, C++, Java, Verilog, HDL, MATLAB, Simulink, etc. are a bridge between a human and a machine that are used for the transfer of human-conceived knowledge to a machine.
A cell phone is a Turing Machine device that will be reprogrammed many times while the device is being developed. Reprogramming is necessary because the requirements of the device's behavior change and primarily because ‘bugs’ are found and must be corrected. Bugs are mistakes in the conceived knowledge, transferred knowledge, or the execution knowledge (for instance, wrong home screen color, up gesture causes screen to scroll down, network connection problems, etc.). In a complex device such as a cell phone, finding these bugs and fixing them can be very difficult. Translating from one model to another and maintaining all the original knowledge contributes to these bugs and can be even more difficult to find and correct. Because of this, extensive simulation of both software and hardware is part of a Chip Design Flow. Simulation introduces another level of model translation and the potential for additional bugs. A design flow that uses a consistent model would be preferable to the current design approach.